package manejadores;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import censo.db;
import entidades.Dispositivo;

public class ManejadorDispositivos {

	private db conexion = null;
	private Dispositivo dispositivo;

	
	
	public ManejadorDispositivos(db conexion) {
		super();
		this.conexion = conexion;
		this.dispositivo = new Dispositivo();
	}
	
	public ManejadorDispositivos(db conexion, Dispositivo dispositivo) {
		super();
		this.conexion = conexion;
		this.dispositivo = dispositivo;
	}
	public boolean add() throws SQLException{
		boolean result = false;

			String sql = "insert into dispositivos (imei,recurso,estado,fecha,usuario) values (?,?,?,sysdate(),?)";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, dispositivo.getImei());
			pst.setString(2, dispositivo.getRecurso());
			pst.setString(3, dispositivo.getEstado());
			pst.setString(4, dispositivo.getUsuario());
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		
		return result;
	}
	public boolean exist(String key) throws SQLException {
		boolean result = false;

			String sql = "select imei from dispositivos where imei = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	
	public boolean Find(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from dispositivos where imei=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				dispositivo = new Dispositivo();
				dispositivo.setImei(rs.getString("imei"));
				dispositivo.setRecurso(rs.getString("recurso"));
				dispositivo.setEstado(rs.getString("estado"));
				dispositivo.setFecha(rs.getString("fecha"));
				dispositivo.setUsuario(rs.getString("usuario"));
				
				result = true;
			}
			rs.close();
			
		return result;	
	}
	
	public db getConexion() {
		return conexion;
	}
	public Dispositivo getDispositivo() {
		return dispositivo;
	}
	
	
	public ArrayList<Dispositivo> list() throws SQLException {
		ArrayList<Dispositivo> dispositivos = new ArrayList<Dispositivo>();
		
			String sql = "select dispositivos.*,personal.nombre from dispositivos,personal where dispositivos.recurso=personal.codigo order by personal.nombre";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Dispositivo dispositivo = new Dispositivo();
				dispositivo.setImei(rs.getString("imei"));
				dispositivo.setRecurso(rs.getString("recurso"));
				dispositivo.setEstado(rs.getString("estado"));
				dispositivo.setFecha(rs.getString("fecha"));
				dispositivo.setUsuario(rs.getString("usuario"));
				dispositivo.setNombre(rs.getString("nombre"));
				dispositivos.add(dispositivo);
			}
			rs.close();
		
		return dispositivos;
	}
	
	public ArrayList<Dispositivo> list(String filtro) throws SQLException {
			if (filtro.isEmpty()) {
				throw new SQLException("Cadena de filtro no puede estar vacia");
			}
			
			ArrayList<Dispositivo> dispositivos = new ArrayList<Dispositivo>();
			
			String sql = "select dispositivos.*,personal.nombre from dispositivos,personal where dispositivos.recurso=personal.codigo ";
			sql += " and " + filtro ;		
			sql += " order by personal.nombre";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Dispositivo dispositivo = new Dispositivo();
				dispositivo.setImei(rs.getString("imei"));
				dispositivo.setRecurso(rs.getString("recurso"));
				dispositivo.setEstado(rs.getString("estado"));
				dispositivo.setFecha(rs.getString("fecha"));
				dispositivo.setUsuario(rs.getString("usuario"));
				dispositivo.setNombre(rs.getString("nombre"));
				
				dispositivos.add(dispositivo);
			}
			rs.close();
		
		return dispositivos;	
	}
	
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = "delete from dispositivos where imei=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			

		return result;	
	}
	
	
	
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}

	public void setDispositivo(Dispositivo dispositivo) {
		this.dispositivo = dispositivo;
	}

	public boolean update(String key) throws SQLException {
		boolean result = false;

		String sql = "update dispositivos set imei=?,recurso=?,estado=? where imei=?";
		java.sql.PreparedStatement pst = conexion.getConnection()
				.prepareStatement(sql);
		pst.setString(1, dispositivo.getImei());
		pst.setString(2, dispositivo.getRecurso());
		pst.setString(3, dispositivo.getEstado());
		pst.setString(4, key);

		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}

		return result;
	}
	
	
}